package com.ExcelServer.controller;

import com.ExcelServer.client.PointsCriteriaClient;
import com.ExcelServer.common.Result;
import com.ExcelServer.pojo.form.update.UpdateStatusForm;
import com.ExcelServer.pojo.query.SelectQuery;
import com.ExcelServer.pojo.vo.PerformanceStatusVo;
import com.ExcelServer.service.impl.PerformanceTrendsServiceImpl;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/se/tableBaseDetails/info")
@Tag(name = "表格信息统计、审批等功能", description = "每个表格的三个列是不能动的，因此，根据这三个列进行基本的操作：表格统计、审批")
public class TableBaseDetailsController {

    @Autowired
    PerformanceTrendsServiceImpl performanceTrendsService;
    @Autowired
    PointsCriteriaClient pointsCriteriaClient;

    @Operation(summary = "获取自定义内容帮助", description = "获取自定义内容帮助")
    @GetMapping("/getHelp")
    public Result getList() {
        Map<String, String> map = new HashMap<>();
        String help = "暂时为空";
        map.put("help", help);
        return Result.success(map);
    }

    // 注：performance_trends 表格记录了动态表格的信息，从这里进行代理获取。

    /**
     * 描述：内容审核通过 （通过的内容不允许教师个人进行改动，需要打回，教师才能进行改动）
     * 参数：{ tableId,rowId }
     */
    @Operation(summary = "内容审核通过", description = "内容审核通过")
    @PostMapping("/UpdateStatusAgree")
    public Result UpdateStatusAgree(@RequestBody UpdateStatusForm updateStatusForm) {
        performanceTrendsService.UpdateStatusAgree(updateStatusForm);
        return Result.success("内容审核通过成功");
    }


    /**
     * 描述：内容审核打回
     * 参数：{ tableId,rowId }
     */
    @Operation(summary = "内容审核打回", description = "内容审核打回")
    @PostMapping("/UpdateStatusDisAgree")
    public Result UpdateStatusDisAgree(@RequestBody UpdateStatusForm updateStatusForm) {
        performanceTrendsService.UpdateStatusDisAgree(updateStatusForm);
        return Result.success("内容审核打回成功");
    }


    /**
     * 描述：根据 教师id 和  进行 内容(内容是指每个动态表的内容) 获取
     * 参数：teacher_id
     * 逻辑： 从performance_trends表中拿到符合 所有的记录的表的信息，
     *       如何动态构建sql，去查找符合teacher_id的记录返回，调用mapper封装的select 动态方法获取
     *       具体方法为：List<Map<String, Object>> getTableDetails 方法
     * */
    @Operation(summary = "获取相关教师的业绩表",description = "获取相关教师的业绩表")
    @PostMapping("/getContentsByTeacherId")
    public Result getContentsByTeacherId(@RequestParam String teacherId) {
        return performanceTrendsService.getContentsByTeacherId(teacherId);
    }

    /**
     * 描述：根据 教师id 进行 积分 自动计算·
     * 参数：teacher_id
     * 逻辑： 基本逻辑与上述相同，不同点在于积分的获取，使用 FeignClient
     *       的方法调用积分模块内容拿到积分，然后在map添加（使用put方法）
     *       进行积分自动计算的获取。然后给出该教师自动积分计算之后的内容。 该方法与上述方法功能有点重复待议。
     * */
    @Operation(summary = "获取相关教师积分",description = "自动计算教师积分")
    @PostMapping("/getScoreByTeacherId")
    public Result getScoreByTeacherId(@RequestParam String teacherId) {
       return performanceTrendsService.getScoreByTeacherId(teacherId);
    }


    /**
     * 描述：业绩积分统计 计算 给出每个大类型（每个动态表）的最高的 前n 个人（ n 是传入值）
     * 参数：max_n
     * */
    @Operation(summary = "获取每个表的前N个值",description = "自动计算教师积分，获取每个表的前N个值")
    @PostMapping("/getEachTableMax")
    public Result getEachTableMax(@RequestParam Integer maxN) {
        return performanceTrendsService.getEachTableMaxN(maxN);
    }

    /**
     * 描述：业绩积分统计 计算 给出每个全部业绩积分的最高的 前n个人 （n是传入值）
     * 参数：max_n
     * */
    @Operation(summary = "获取全部业绩前N个值",description = "自动计算教师积分，获取全部业绩的前N个值")
    @PostMapping("/getAllTableMaxN")
    public Result getAllTableMaxN(@RequestParam Integer maxN) {
        return performanceTrendsService.getAllTableMaxN(maxN);
    }

    @Operation(summary = "教师业绩选择",description = "获取教师满足筛选条件的所有业绩")
    @PostMapping("/selectPerformance")
    Result<List<String>> selectPerformance(@RequestBody SelectQuery selectQuery){
        return performanceTrendsService.selectPerformance(selectQuery);
    }

    @Hidden
    @Operation(summary = "动态业绩表单内容统计",description = "动态业绩表单内容统计")
    @GetMapping("/getPerformanceCount")
    Result<PerformanceStatusVo> getPerformanceCount(){
        return performanceTrendsService.getPerformanceCount();
    }


}
